]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
searchDisplay: Scroll the search results when using keynav
authorJasper St. Pierre <jstpierre@mecheye.net>
Mon, 11 Mar 2013 18:21:42 +0000 (14:21 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Tue, 12 Mar 2013 23:29:48 +0000 (19:29 -0400)
This makes keynav for search results much more usable.

https://bugzilla.gnome.org/show_bug.cgi?id=689681

js/ui/searchDisplay.js

index bdc45e43d337a9a2ac6d919b3af67064f1d7be22..ce99f0f03c296b8664a56e991834cdb46abff8b9 100644 (file)
@@ -4,6 +4,7 @@ const Clutter = imports.gi.Clutter;
 const Lang = imports.lang;
 const Gtk = imports.gi.Gtk;
 const Meta = imports.gi.Meta;
+const Signals = imports.signals;
 const St = imports.gi.St;
 const Atk = imports.gi.Atk;
 
@@ -13,6 +14,7 @@ const Main = imports.ui.main;
 const Overview = imports.ui.overview;
 const Separator = imports.ui.separator;
 const Search = imports.ui.search;
+const Util = imports.misc.util;
 
 const MAX_LIST_SEARCH_RESULTS_ROWS = 3;
 const MAX_GRID_SEARCH_RESULTS_ROWS = 1;
@@ -227,9 +229,14 @@ const ListSearchResults = new Lang.Class({
         this._pendingClear = true;
     },
 
+    _keyFocusIn: function(icon) {
+        this.emit('key-focus-in', icon);
+    },
+
     renderResults: function(metas) {
         for (let i = 0; i < metas.length; i++) {
             let display = new ListSearchResult(this.provider, metas[i], this._terms);
+            display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
             this._content.add_actor(display.actor);
         }
     },
@@ -246,6 +253,7 @@ const ListSearchResults = new Lang.Class({
             return null;
     }
 });
+Signals.addSignalMethods(ListSearchResults.prototype);
 
 const GridSearchResults = new Lang.Class({
     Name: 'GridSearchResults',
@@ -288,9 +296,14 @@ const GridSearchResults = new Lang.Class({
         this._pendingClear = true;
     },
 
+    _keyFocusIn: function(icon) {
+        this.emit('key-focus-in', icon);
+    },
+
     renderResults: function(metas) {
         for (let i = 0; i < metas.length; i++) {
             let display = new GridSearchResult(this.provider, metas[i], this._terms);
+            display.actor.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
             this._grid.addItem(display.actor);
         }
     },
@@ -307,6 +320,7 @@ const GridSearchResults = new Lang.Class({
             return null;
     }
 });
+Signals.addSignalMethods(GridSearchResults.prototype);
 
 const SearchResults = new Lang.Class({
     Name: 'SearchResults',
@@ -366,6 +380,10 @@ const SearchResults = new Lang.Class({
         return false;
     },
 
+    _keyFocusIn: function(provider, icon) {
+        Util.ensureActorVisibleInScrollView(this._scrollView, icon);
+    },
+
     createProviderMeta: function(provider) {
         let providerBox = new St.BoxLayout({ style_class: 'search-section',
                                              vertical: true });
@@ -379,6 +397,8 @@ const SearchResults = new Lang.Class({
             resultDisplay = new GridSearchResults(provider);
         }
 
+        resultDisplay.connect('key-focus-in', Lang.bind(this, this._keyFocusIn));
+
         let resultDisplayBin = new St.Bin({ child: resultDisplay.actor,
                                             x_fill: true,
                                             y_fill: true });